package com.lwm.service.impl;


import com.lwm.dao.IAccountDAO;
import com.lwm.service.IAccountService;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.annotation.Resource;


/**
 * xml配置：    <bean id="accountService" class="com.lwm.service.impl.AccountServiceImpl" scope="" init-method="" destroy-method="" />
 * 1.创建对象的注解：bean标签
 *
 * @author liweimin
 * @Component :将当前类对象存入Spring容器中 属性value 不写默认类名首字母小写
 * @Controller : 表现层
 * @Service : 业务层
 * @Repository : 持久层
 * Spring 提供的明确的三层使用的注解，使三层对象更加清晰
 * 2.注入数据的注解： bean标签中的property标签
 * @Autowired 自动按照类型注入，只要容器中有唯一的一个bean对象和要注入的变量类型匹配，就可以注入成功，相同类型的话 按属性名字去取 取不到 或者重复bean 报错
 * @Qualifier 按照类型注入的基础上再按照名称注入，给类成员注入时，不能单独使用。给方法参数注入时，可以使用。
 * @Resource 直接按照bean的id注入
 * 以上的三个注解只能注入bean类型的数据，不能注入基本类型数据和String类型的，另外集合类型的注入只能通过配置文件注入
 * @Value 用于注入基本类型和String 类型 指定数据的值 可以使用Spring中的EL表达式 （SpEL） 写法：${表达式}
 * 3.改变作用范围的注解: scope属性
 * @Scope 改变作用范围 singleton prototype 默认单例
 * <p>
 * 4.和生命周期相关的注解: init-method destroy-method(了解)
 * @PreDestroy
 * @PostConstruct
 * @date 2021/6/1 16:23
 * @since
 */
//@Scope("prototype")
    //多例对象的销毁不是由Spring执行。Java 垃圾回收机制执行
@Service("accountService")
public class AccountServiceImpl implements IAccountService {

    //    @Autowired
//    @Qualifier("accountDAO")
    @Resource(name = "accountDAO")
    private IAccountDAO accountDAO;

    @PostConstruct
    public void init() {
        System.out.println("初始化");
    }

    @PreDestroy
    public void destroy() {
        System.out.println("对象销毁");
    }

    @Override
    public void saveAccount() {
        accountDAO.saveAccount();
    }

}
